package com.sojson.dao.impl;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.annotation.Resource;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.sojson.base.impl.BaseDaoImpl;
import com.sojson.dao.MemberDao;
import com.sojson.entity.bo.Select;
import com.sojson.entity.po.Member;
import com.sojson.entity.vo.MemberVo;

/**
 * 用户表Dao实现类(目的:把分页插件从Service层分离,这样就不用每次调Dao接口都要分页)
 * 
 * @author liu
 * @date 2021-03-16
 */
@Repository
public class MemberDaoImpl extends BaseDaoImpl<MemberDao, Member> implements MemberDao {

    @Resource
    private MemberDao memberDao;

    /**
     * 单条插入
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int insert(Member member) {
        return memberDao.insert(member);
    }

    /**
     * 批量插入
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int insertList(List<Member> members) {
        return memberDao.insertList(members);
    }

    /**
     * 通过对象批量删除(物理删除)
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int deleteByDto(Member member) {
        return memberDao.deleteByDto(member);
    }

    /**
     * 统计全部数量
     * 
     * @return
     * @throws SQLException
     */
    @Override
    public int countAll() {
        return memberDao.countAll();
    }

    /**
     * 查询所有
     * 
     * @return
     * @throws SQLException
     */
    @Override
    public List<Member> listAll() {
        return memberDao.listAll();
    }

    /**
     * 根据对象统计数量
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int countByDto(Member member) {
        return memberDao.countByDto(member);
    }

    /**
     * 根据对象查询
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public List<Member> listByDto(Member member) {
        startPageDefaultSort(member);
        return memberDao.listByDto(member);
    }

    /**
     * 通过id删除(物理删除)
     * 
     * @param id
     * @return
     * @throws SQLException
     */
    @Override
    public int deleteById(Integer id) {
        return memberDao.deleteById(id);
    }

    /**
     * 通过id列表删除(物理删除)
     * 
     * @param ids
     * @return
     * @throws SQLException
     */
    @Override
    public int deleteByIdList(ArrayList<Integer> ids) {
        return memberDao.deleteByIdList(ids);
    }

    /**
     * 通过id更新(全部更新)
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int updateById(Member member) {
        return memberDao.updateById(member);
    }

    /**
     * 通过id列表更新(全部更新)(更新内容相同)
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int updateStaticByIdList(Member member) {
        return memberDao.updateStaticByIdList(member);
    }

    /**
     * 通过id列表更新(全部更新)(更新内容不相同)
     * 
     * @param members
     * @return
     * @throws SQLException
     */
    @Override
    public int updateChangeByIdList(ArrayList<Member> members) {
        return memberDao.updateChangeByIdList(members);
    }

    /**
     * 通过id更新(局部更新)
     * 
     * @param member
     * @return
     */
    @Override
    public int updatePartialById(Member member) {
        return memberDao.updatePartialById(member);
    }

    /**
     * 通过id更新(局部更新)
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int updatePartialByNo(Member member) {
        return memberDao.updatePartialByNo(member);
    }

    /**
     * 通过id列表更新(局部更新)(更新内容相同)
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int updateStaticPartialByIdList(Member member) {
        return memberDao.updateStaticPartialByIdList(member);
    }

    /**
     * 通过id列表更新(局部更新)(更新内容不相同)
     * 
     * @param members
     * @return
     * @throws SQLException
     */
    @Override
    public int updateChangePartialByIdList(ArrayList<Member> members) {
        return memberDao.updateChangePartialByIdList(members);
    }

    /**
     * 通过id查询
     * 
     * @param id
     * @return
     * @throws SQLException
     */
    @Override
    public Member findById(Integer id) {
        return memberDao.findById(id);
    }

    /**
     * 通过id列表查询
     * 
     * @param ids
     * @return
     * @throws SQLException
     */
    @Override
    public ArrayList<Member> findByIdList(ArrayList<Integer> ids) {
        return memberDao.findByIdList(ids);
    }

    /**
     * 通过对象查询id列表
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public ArrayList<Integer> findIdByDto(Member member) {
        return memberDao.findIdByDto(member);
    }

    /**
     * 清空数据(物理清空)
     * 
     * @throws SQLException
     */
    @Override
    public void clear() {
        memberDao.clear();
    }

    /**
     * 统计手机号相同的用户数量(判断手机号是否有用户,一个手机号只能有一个用户)
     * 
     * @param mobile 手机号
     * @return
     * @throws SQLException
     */
    @Override
    public int countByMobile(String mobile) {
        return memberDao.countByMobile(mobile);
    }

    /**
     * 统计手机号相同的用户数量(判断手机号是否有用户,一个手机号只能有一个用户)
     * 
     * @param mobile 手机号
     * @return
     * @throws SQLException
     */
    @Override
    public int countByRoleMobile(@Param("roles") Set<String> roles, @Param("mobile") String mobile) {
        return memberDao.countByRoleMobile(roles, mobile);
    }

    /**
     * 统计相同帐号的用户数量(判断帐号是否有用户)
     * 
     * @param username 帐号
     * @return
     * @throws SQLException
     */
    @Override
    public int countByUsername(String username) {
        return memberDao.countByUsername(username);
    }

    /**
     * 通过手机号查询
     * 
     * @param mobile
     * @return
     * @throws SQLException
     */
    @Override
    public Member findByMobile(String mobile) {
        return memberDao.findByMobile(mobile);
    }

    /**
     * 通过手机号查询
     * 
     * @param roles     角色列表
     * @param mobile    
     * @return
     */
    @Override
    public Member findByRoleMobile(@Param("roles") Set<String> roles, @Param("mobile") String mobile) {
        return memberDao.findByRoleMobile(roles, mobile);
    }

    /**
     * 通过邀请码查询
     * 
     * @param invitationCode 邀请码
     * @return
     * @throws SQLException
     */
    @Override
    public Member findByInvitationCode(String invitationCode) {
        return memberDao.findByInvitationCode(invitationCode);
    }

    /**
     * 通过用户ID查询用户现有佣金
     * 
     * @param id
     * @return
     */
    @Override
    public BigDecimal findBalanceById(int id) {
        return memberDao.findBalanceById(id);
    }

    /**
     * 通过用户ID修改用户佣金
     * 
     * @param id
     * @param balance
     * @return
     */
    @Override
    public int updateBalanceById(Integer id, BigDecimal balance) {
        return memberDao.updateBalanceById(id, balance);
    }

    /**
     * 通过id更新手机号
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public int updateMobileById(Member member) {
        return memberDao.updateMobileById(member);
    }

    /**
     * 通过ID查询上级用户
     * 
     * @param id
     * @return
     */
    @Override
    public Member findTopById(Integer id) {
        return memberDao.findTopById(id);
    }

    /**
     * 通过编号查询上级用户
     * 
     * @param no
     * @return
     */
    @Override
    public Member findTopByNo(String no) {
        return memberDao.findTopByNo(no);
    }

    /**
     * 通过wxUnionid查询
     * 
     * @param wxUnionid
     * @return
     * @throws SQLException
     */
    @Override
    public Member findByWxUnionid(String wxUnionid) {
        return memberDao.findByWxUnionid(wxUnionid);
    }

    /**
     * 通过微信唯一标识查询
     * 
     * @param roles     角色列表
     * @param wxUnionid 微信唯一编号
     * @return
     */
    @Override
    public Member findByRoleWxUnionid(@Param("roles") Set<String> roles, @Param("wxUnionid") String wxUnionid) {
        return memberDao.findByRoleWxUnionid(roles, wxUnionid);
    }

    /**
     * 通过微信openid查询
     * 
     * @param roles     角色列表
     * @param openid
     * @return
     */
    @Override
    public Member findByRoleOpenid(@Param("roles") Set<String> roles, @Param("openid") String openid) {
        return memberDao.findByRoleOpenid(roles, openid);
    }

    /**
     * 通过帐号查询
     * 
     * @param username
     * @return
     */
    @Override
    public Member findByUsername(String username) {
        return memberDao.findByUsername(username);
    }

    /**
     * 通过角色和帐号查询
     * 
     * @param roles     角色列表
     * @param username  帐号
     * @return
     */
    @Override
    public Member findByRoleUsername(@Param("roles") Set<String> roles, @Param("username") String username) {
        return memberDao.findByRoleUsername(roles, username);
    }

    /**
     * 统计微信号相同的用户数量(判断微信号是否有用户,一个微信号只能有一个用户)
     * 
     * @param wxUnionid
     * @return
     */
    @Override
    public int countByWxUnionid(String wxUnionid) {
        return memberDao.countByWxUnionid(wxUnionid);
    }

    /**
     * 获取当前佣金信息
     * 
     * @param id
     * @return
     * @throws SQLException
     */
    @Override
    public Member findBalance(Integer id) {
        return memberDao.findBalance(id);
    }

    /**
     * 获取当前余额信息
     * 
     * @param id
     * @return
     */
    @Override
    public Member findBrokerage(Integer id) {
        return memberDao.findBrokerage(id);
    }

    /**
     * 获取下级用户列表
     * 
     * @param member
     * @return
     */
    @Override
    public List<Member> findUnderlingByDto(Member member) {
        startPageDefaultSort(member);
        return memberDao.findUnderlingByDto(member);
    }

    /**
     * 获取简历
     * 
     * @param id
     * @return
     */
    @Override
    public MemberVo findResume(Integer id) {
        return memberDao.findResume(id);
    }

    /**
     * 获取简历
     * 
     * @param member
     * @return
     */
    @Override
    public List<MemberVo> findResumeList(Member member) {
        startPageDefaultSort(member);
        return memberDao.findResumeList(member);
    }

    /**
     * 获取用户的当前诚意金信息
     * 
     * @param userId
     * @return
     */
    @Override
    public MemberVo findDeposit(Integer userId) {
        return memberDao.findDeposit(userId);
    }

    /**
     * 通过postApplyId查询
     * 
     * @param postApplyId
     * @return
     * @throws SQLException
     */
    @Override
    public Member findByPostApplyId(Integer postApplyId) {
        return memberDao.findByPostApplyId(postApplyId);
    }

    /**
     * 根据对象查询
     * 
     * @param member
     * @return
     * @throws SQLException
     */
    @Override
    public List<MemberVo> list(Member member) {
        startPageDefaultSort(member);
        return memberDao.list(member);
    }

    /**
     * 根据ID查询
     * 
     * @param id
     * @return
     * @throws SQLException
     */
    @Override
    public MemberVo getInfo(Integer id) {
        return memberDao.getInfo(id);
    }

    /**
     * 通过订单ID查询
     * 
     * @return
     */
    @Override
    public Member findMerchantByOrderId(Integer goodsId) {
        return memberDao.findMerchantByOrderId(goodsId);
    }

    /**
     * 通过编号查询
     * 
     * @param no
     * @return
     */
    @Override
    public Member findByNo(String no) {
        return memberDao.findByNo(no);
    }

    /**
     * 获取对应角色的用户列表
     * 
     * @param member
     * @return
     */
    @Override
    public List<MemberVo> listByRole(MemberVo member) {
        startPageDefaultSort(member);
        return memberDao.listByRole(member);
    }

    /**
     * 根据对象查询
     * 
     * @param member
     * @return
     */
    @Override
    public List<MemberVo> listUser(MemberVo member) {
        startPageDefaultSort(member);
        return memberDao.listUser(member);
    }

    /**
     * 获取下拉列表
     * 
     * @param member
     * @return
     */
    @Override
    public List<Select> select(MemberVo member) {
        startPage(member);
        return memberDao.select(member);
    }

    /**
     * 获取商家下拉列表
     * 
     * @param member
     * @return
     */
    @Override
    public List<Select> selectMerchant(MemberVo member) {
        startPage(member);
        return memberDao.selectMerchant(member);
    }

}